package wizard;

import java.util.Properties;

import fr.alma.interfacesPlugins.PluginEntree;
import fr.alma.observation.Observateur;
import fr.alma.observation.Observer;

/**
 * Classe de conception de nouveaux plugins.
 * @author KROMMENHOEK Cedric
 *
 */
public class Concepteur implements PluginEntree {

	/**
	 * Proprietes du nouveau plugin.
	 */
	private Properties proprietes;
	
	/**
	 * Gestion des observateurs.
	 */
	private Observer observer;
	
	/**
	 * Fenetre du plugin.
	 */
	private FenetreConcepteur fenetre;
	
	/**
	 * Constructeur.
	 */
	public Concepteur() {		
		this.observer = new Observer();
		this.proprietes = new Properties();
		this.fenetre = new FenetreConcepteur(this);
	}

	/**
	 * Acces au type de retour.
	 * @return le type de retour
	 */
	public Class<?> getReturnType() {
		return Properties.class;
	}

	/**
	 * Acces a la categorie du plugin.
	 * @return la categorie
	 */
	public String getCategorie() {
		return "wizard";
	}

	/**
	 * Acces a la description du plugin.
	 * @return la description
	 */
	public String getDescription() {
		return "Systeme de conception de nouveaux plugins";
	}

	/**
	 * Demarrage du plugin.
	 */
	public void start() {
		this.observer.start();
		this.fenetre.setVisible(true);
	}

	/**
	 * Arret du plugin.
	 */
	public void stop() {
		this.observer.stop();
		this.fenetre.setVisible(false);
	}

	/**
	 * Methode d'ajout d'un observateur.
	 * @param observateur l'observateur a ajouter
	 */
	public void ajoutObservateur(Observateur observateur) {
		this.observer.ajoutObservateur(observateur);
	}
	
	/**
	 * Methode de mise a jour des observateurs.
	 */
	public void updateObservateurs() {
		this.observer.updateObservateurs(this.proprietes);
	}

	/**
	 * Validation des parametres.
	 * @return vrai si toutes les proprietes sont renseignees
	 */
	public boolean valider() {
		String propriete;
		
		propriete = this.fenetre.getNom();
		if (!propriete.isEmpty()) {
			this.proprietes.setProperty("nom", propriete);
		}
		propriete = this.fenetre.getPackage();
		if (!propriete.isEmpty()) {
			this.proprietes.setProperty("package", propriete);
		}
		propriete = this.fenetre.getCategorie();
		if (!propriete.isEmpty()) {
			this.proprietes.setProperty("categorie", propriete);
		}
		propriete = this.fenetre.getDescription();
		if (!propriete.isEmpty()) {
			this.proprietes.setProperty("description", propriete);
		}
		propriete = this.fenetre.getTypePlugin();
		if (!propriete.isEmpty()) {
			this.proprietes.setProperty("type", propriete);
		}
		
		if (this.proprietes.size() == 5) {
			this.updateObservateurs();
			return true;
		} else {
			return false;
		}
	}
	
}
